package com.atguigu.demo;

import java.util.Random;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @Author 孔德成
 * @Slogan 致敬大师，致敬未来的你
 * @date 2021/8/10
 * @desc 争车位，6车抢3位
 */

/**
 * 释放车位应写在 finally 块中，保证车位一定会被释放
 */
public class SemaphoreDemo2 {
    public static void main(String[] args) {
        // 模拟 3 个车位
        Semaphore semaphore = new Semaphore(3);

        for (int i = 1; i <= 6; i++) {
            new Thread(() -> {
                boolean flag = false;
                try {
                    // 获得车位
                    semaphore.acquire();
                    flag = true;
                    System.out.println(Thread.currentThread().getName() + "----进入车位");
                    // 模拟随机停车时间（0-3）
                    TimeUnit.SECONDS.sleep(new Random().nextInt(4));
                    System.out.println(Thread.currentThread().getName() + "----离开车位");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    if (flag) {
                        // 释放车位
                        semaphore.release();
                    }
                }
            }, String.valueOf(i)).start();
        }

    }
}
